package com.xd.lib.tool.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;

import com.xd.lib.Const;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 文件 I/O 辅助类
 * Created by Administrator on 2015/6/12.
 */
public class FileUtil {

    /**
     * 保存图片到指定的路径
     * @param bmp 图片
     * @param dirName 文件夹
     * @param fileName 文件名
     * @throws IOException
     */
    public static void saveImage(Bitmap bmp, String dirName, String fileName) throws IOException {
        // 判断sd卡是否存在
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            String storagePath = Environment.getExternalStorageDirectory().toString();
            File dir = new File(storagePath, dirName);
            // 判断文件夹是否存在，不存在则创建
            if(!dir.exists()){
                dir.mkdir();
            }

            File file = new File(dir.getPath(), fileName);
            // 判断文件是否存在，不存在则创建
            if (!file.exists()) {
                file.createNewFile();
            }

            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(file);
                if (fos != null) {
                    // 第一参数是图片格式，第二个是图片质量，第三个是输出流
                    bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
                    // 用完关闭
                    fos.flush();
                    fos.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 保存配置到应用程序的数据目录下 data/data/app包名/files/data.dat
     * @param context
     * @param config
     */
    public static void saveConfig(Context context, AppConfig config){
        if (context == null || config == null){
            return;
        }

        FileOutputStream fos = null;

        try {
            fos = context.openFileOutput(Const.FILE_NAME_SAVE_DATA, Context.MODE_PRIVATE);

            DataOutputStream dos = new DataOutputStream(fos);

            dos.writeInt(config.getStageIndex());
            dos.writeInt(config.getCoins());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 读取应用程序的配置信息 data/data/app包名/files/data.dat
     * @param context
     * @return
     */
    public static AppConfig loadConfig(Context context){
        if (context == null){
            return null;
        }

        AppConfig config = new AppConfig();

        FileInputStream fis = null;

        try {
            fis = context.openFileInput(Const.FILE_NAME_SAVE_DATA);

            DataInputStream dis = new DataInputStream(fis);

            config.setStageIndex(dis.readInt());
            config.setCoins(dis.readInt());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            if (fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return config;
    }
}
